比較 Kotlin & Flutter 接收到 JSON 格式資料轉換為 data class 的方式
由JSON 字串 {"name":"Alice", "age": 40} 轉換至 UserData
data class
步驟說明:
匯入 kotlinx.serialization.Serializable
套件,將 data class 序列化,而可以由 JSON 格式字串轉換至此 data class。
宣告 UserData
data class 和其建構子
name
為字串屬性變數,age
為整數屬性變數@Serializable
代表將 data class 序列化匯入 kotlinx.serialization.json.Json
和 kotlinx.serialization.decodeFromString
套件
UserData
data class,並將最終轉換結果儲存在 userInfo
變數。import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.decodeFromString
@Serializable
data class UserData(val name: String, val age: Int)
fun main() {
val userInfo = Json.decodeFromString<UserData>("""{"name":"Alice", "age": 40}""")
}
步驟說明:
宣告 UserData
data class:
name
為字串屬性變數,age
為整數屬性變數UserData.fromJson
建構子:接收到 Map<String, dynamic>
屬性變數後,透過 key value 取出對應的資料後,儲存到變數中。json['name']
取出 "Alice" 後,存入 name
字串變數接收到 JSON 格式資料轉換為 UserData
data class
UserData
data class 和 Flutter官方套件 dart:convert
dart:convert
中 jsonDecode
函式,將 JSON 格式的字串轉換為 Map<String, dynamic>
屬性後,儲存到 userMap
變數。userInfo['name']
取出 "Alice"UserData.fromJson
建構子將 Map<String, dynamic>
屬性 JSON 資料轉換為 UserData
data class,將最終轉換結果儲存在 userInfo
變數。1.獨立檔案:宣告 data class
class UserData {
String name;
Int age;
UserData(this.name,this.age);
UserData.fromJson(Map<String, dynamic> json)
: name = json['name'],
age = int.parse(json['age']);
}
2. 接收到 JSON 格式資料轉換為 data class
import 'dart:convert';
///需匯入 data class
const jsonString = '{"name":"Alice", "age": 40}';
Map<String, dynamic> userMap = jsonDecode(jsonString);
var userInfo = UserData.fromJson(userMap);
Kotlin Serialization:https://kotlinlang.org/docs/serialization.html#example-json-serialization
Flutter JSON and serialization:https://docs.flutter.dev/data-and-backend/serialization/json